package com.view.utils;

/**
 * Creator:Yx
 * Time:2023/4/23 11:03
 * Description:Android开发中的图片压缩
 */
public class AndroidImgYaSuo {

    /**
     * 几种常见的压缩方式
     * 1.质量压缩
     *   bitmap.compress(Bitmap.CompressFormat.JPEG,50,outputStream)
     *
     * 或降低采样率
     *   val options = BitmapFactory.Options()
     *   options.inSampleSize = 2
     *   val compressedBitmap = BitmapFactory.decodeFile(pathName,options)
     *
     * 2.色彩压缩
     *   val options = BitmapFactory.Options()
     *   options.inPreferredConfig = Bitmap.Config.RGB_565
     *   val compressedBitmap = BitmapFactory.decodeFile(pathName,options)
     *
     * 3.裁剪压缩
     * 降低图片分辨率，减小图片尺寸。比如将图片缩小一半：
     *   val bitmap = BitmapFactory.decodeFile(path)
     *   val matrix = Matrix()
     *   matrix.setScale(0.5f, 0.5f)
     *   val scaledBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.width / 2, bitmap.height / 2, matrix, true)
     *
     * 采用哪种压缩方式，根据业务场景而定，例如用户头像用裁剪压缩，其他场景一般常用质量压缩等等。
     *
     * 图片处理框架
     * 在Java应用中使用
     * 这里推荐一个Google开源的图片处理框架Thumbnailator。它可以对图片进行缩放、裁剪、压缩、旋转、加水印等操作。
     * 详细介绍和更多的使用指南，请访问开源地址：https://github.com/coobird/thumbnailator
     *
     * 此框架常用于服务端处理图片，搞后端的同学应该对其并不陌生。
     *
     * 集成依赖：
     * <dependency>
     *   <groupId>net.coobird</groupId>
     *   <artifactId>thumbnailator</artifactId>
     *   <version>0.4.11</version>
     * </dependency>
     *
     * 要实现图片压缩，用法也非常简单：
     *
     * Thumbnails.of(srcFile)//源文件
     *             .scale(1.0)//缩放级别：0-1
     *             .outputQuality(0.5f)//输出质量:0-1
     *             .toFile(toFilePath);//目标路径
     *
     * 根据实际使用得知，压缩后的图片文件大小能降低50%甚至更多，而且画质损失极小，基本难以感知到。
     *
     * 在Android项目中使用
     * Thumbnailator虽然是基于Java的，但是它用到了java.awt.*里面的类，在Android中无法访问到这些类，
     * 而且将java.awt包导入Android项目的成本也比较高，所以Thumbnailator尽管优秀，但可惜无法应用于移动端。
     *
     * Android中比较知名的图片压缩框架是Luban和Compressor。Luban的压缩算法听说是根据微信图片压缩逆推的；Compressor则支持Kotlin的协程。
     *
     * Luban开源地址：https://github.com/Curzibn/Luban
     *
     * Compressor开源地址：https://github.com/zetbaitsu/Compressor
     * Compressor使用方便且API比较简单，下面介绍Compressor的简单使用：
     * 集成：
     *   implementation 'id.zelory:compressor:3.0.0'
     * 使用:
     *   val toFile = File(toPath)//压缩后图片的保存路径
     *   val resultPath = Compressor.compress(context, toFile) {
     *        quality(25)//压缩质量0-100
     *   }.path
     * 压缩后画质还行，25的quality图片大小减少50%甚至更多；quality为50时，图片大小减幅不大，在50%以内。
     */

}
